<?php
/**
 * Created by JetBrains PhpStorm.
 * User: akrug
 * Date: 29.05.12
 * Time: 15:25
 * To change this template use File | Settings | File Templates.
 */
class Backend_Form_User_User extends UcsMvc_AbstractForm
{
    public function init(){
        /**
         * email des neuen benutzers
         */
		$element = new Zend_Form_Element_Text('be_users_email');
        $element
            ->setRequired(true)
            ->setLabel($this->_translator->translate('E-Mail-Adresse', $this->_language))
            ->addValidator('EmailAddress', true);
        $this->addElement($element);

        /**
         * vorname des benutzers
         */
		$element = new Zend_Form_Element_Text('be_users_firstname');
        $element
            ->setRequired(true)
            ->setLabel($this->_translator->translate('Vorname', $this->_language))
            ->addValidator('StringLength', true, array('min' => 1, 'max' => 150));
        $this->addElement($element);

        /**
         * nachmname des benutzers
         */
		$element = new Zend_Form_Element_Text('be_users_lastname');
        $element
            ->setRequired(true)
            ->setLabel($this->_translator->translate('Nachname', $this->_language))
            ->addValidator('StringLength', true, array('min' => 1, 'max' => 150));
        $this->addElement($element);

        /**
         * rolle des benutzers
         */
        $element = new Zend_Form_Element_Select('role');
        $element->setRequired(true)
            ->setLabel($this->_translator->translate('Benutzerrolle', $this->_language))
            ->addMultiOptions($this->getRoles());
        $this->addElement($element);

        /**
         * name des unternehmens
         */
		$element = new Zend_Form_Element_Password('be_users_password');
        $element
            ->setRequired(true)
            ->setLabel($this->_translator->translate('Benutzerpasswort', $this->_language))
            ->addValidator('StringLength', true, array('min' => 1, 'max' => 100))
            ->addValidator('NotEmpty', true, array('messages'=>'Bitte geben Sie ein Passwort ein.'))
            ->addValidator('Regex',true, array('pattern' => "/^[A-Za-z0-9[:punct:]]{8,}$/"))
            ->addValidator('Regex',true, array('pattern' => "/[0-9]+/"))
            ->addValidator('Regex',true, array('pattern' => "/[A-Za-z]+/"))
            ->addValidator('Regex',true, array('pattern' => "/[[:punct:]]+/"))
            ->addErrorMessage($this->_translator->translate('passwordInvalid', $this->_language));;
        $this->addElement($element);

        $this->prepareDecorators();
    }

    /**
     * bezieht alle fuer das Backend moegliche Benutzer
     * mit der Unterscheidung, dass ggf. nicht alle Benutzerrollen von dem angemeldeten Benutzer vergeben werden duerfen
     *
     * @return array
     */
    public function getRoles(){
        $multioptions  = array();

        //jede rolle beinhaltet auch die Umgebung in dem sie vergeben werden kann (Backend be_ ; frontend fe_ ...)
        $rolesAvailable = $this->_acl->getRoles();

        //der benutzerprefix des moduls wird identifiziert siehe model_UserACL
        $modulePrefix = $this->_acl->modulePrefix[$this->_request->getModuleName()];

        //regexpattern - erkennt prefix
        $pattern = '/^'.$modulePrefix.'+/';

        //alle nicht Backend rollen werden gefiltert
        foreach($rolesAvailable as $role){
            if(preg_match($pattern, $role)){
                $multioptions[$role] = $role;
            }
        }

        //filtert alle Benutzerrollen, die nicht vom angemeldeten Benutzer vergeben werden duerfen
        if(!$this->accesAllowed('protectedRoles')){
            foreach($this->_acl->protectedRoles as $protectedRole){
                if(isset($multioptions[$protectedRole])){
                    unset($multioptions[$protectedRole]);
                }
            }
        }

        //bearbeitet array zur ausgabe
        foreach($multioptions as $Index => $multioption){
            $multioptions[$Index] = strtoupper(preg_replace($pattern, '', $multioption));
        }

        return $multioptions;
    }
}
